package com.qf.common.persistence;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.qf.common.util.StringUtils;
import lombok.Data;
import lombok.Setter;

import javax.xml.bind.annotation.XmlTransient;
import java.io.Serializable;

@Data
public abstract class BaseEntity<T> implements Serializable {
    /**
     * 实体编号（唯一标识）
     */
    protected String id;
    /**
     * 令牌
     */
    protected String token;
    /**
     * 当前实体分页对象
     */
    @Setter
    protected Page<T> page;

    /**
     * 是否是新记录（默认：false），调用setIsNewRecord()设置新记录，使用自定义ID。
     * 设置为true后强制执行插入语句，ID不会自动生成，需从手动传入。
     */
    protected boolean isNewRecord = false;

    public boolean getIsNewRecord() {
        return isNewRecord || StringUtils.isBlank(getId());
    }

    /**
     * 删除标记（0：正常；1：删除；2：审核；）
     */
    public static final String DEL_FLAG_NORMAL = "0";
    public static final String DEL_FLAG_DELETE = "1";
    public static final String DEL_FLAG_AUDIT = "2";

    /**
     * 是否是新记录（默认：false），调用setIsNewRecord()设置新记录，使用自定义ID。
     * 设置为true后强制执行插入语句，ID不会自动生成，需从手动传入。
     */
    public void setIsNewRecord(boolean isNewRecord) {
        this.isNewRecord = isNewRecord;
    }

    @JsonIgnore
    @XmlTransient
    public Page<T> getPage() {
        return page;
    }
}
